package com.example.agriapp.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeUnit;

public class DateUtils {
    // 日期格式常量
    private static final String DATE_FORMAT_FEED = "yyyy-MM-dd";
    private static final String DATE_FORMAT_DISPLAY = "MM月dd日";
    private static final String DATE_FORMAT_DETAIL = "yyyy年MM月dd日 HH:mm";
    
    // 时间单位常量
    private static final long MILLIS_PER_MINUTE = TimeUnit.MINUTES.toMillis(1);
    private static final long MILLIS_PER_HOUR = TimeUnit.HOURS.toMillis(1);
    private static final long MILLIS_PER_DAY = TimeUnit.DAYS.toMillis(1);
    
    /**
     * 获取当前日期字符串(用于存储)
     * @return yyyy-MM-dd 格式的日期字符串
     */
    public static String getCurrentDate() {
        return new SimpleDateFormat(DATE_FORMAT_FEED, Locale.getDefault())
                .format(new Date());
    }
    
    /**
     * 将存储的日期转换为显示格式
     * @param storedDate 数据库中存储的日期(yyyy-MM-dd)
     * @return 显示格式(MM月dd日)
     */
    public static String formatForDisplay(String storedDate) {
        try {
            Date date = new SimpleDateFormat(DATE_FORMAT_FEED, Locale.getDefault())
                    .parse(storedDate);
            return new SimpleDateFormat(DATE_FORMAT_DISPLAY, Locale.getDefault())
                    .format(date);
        } catch (Exception e) {
            return storedDate; // 解析失败返回原格式
        }
    }
    
    /**
     * 获取详细时间格式
     * @param timestamp 时间戳
     * @return yyyy年MM月dd日 HH:mm 格式的字符串
     */
    public static String getDetailTime(long timestamp) {
        return new SimpleDateFormat(DATE_FORMAT_DETAIL, Locale.getDefault())
                .format(new Date(timestamp));
    }
    
    /**
     * 生成相对时间描述(如: 刚刚, 5分钟前, 3小时前, 昨天, 前天, 具体日期)
     * @param timestamp 时间戳
     * @return 相对时间字符串
     */
    public static String getRelativeTime(long timestamp) {
        long now = System.currentTimeMillis();
        long diff = now - timestamp;
        
        if (diff < MILLIS_PER_MINUTE) {
            return "刚刚";
        } else if (diff < MILLIS_PER_HOUR) {
            long minutes = TimeUnit.MILLISECONDS.toMinutes(diff);
            return minutes + "分钟前";
        } else if (diff < MILLIS_PER_DAY) {
            long hours = TimeUnit.MILLISECONDS.toHours(diff);
            return hours + "小时前";
        } else if (diff < MILLIS_PER_DAY * 2) {
            return "昨天";
        } else if (diff < MILLIS_PER_DAY * 3) {
            return "前天";
        } else {
            return new SimpleDateFormat(DATE_FORMAT_DISPLAY, Locale.getDefault())
                    .format(new Date(timestamp));
        }
    }
    
    /**
     * 将日期字符串转换为时间戳
     * @param dateString yyyy-MM-dd 格式的日期字符串
     * @return 时间戳
     */
    public static long parseDateToTimestamp(String dateString) {
        try {
            return new SimpleDateFormat(DATE_FORMAT_FEED, Locale.getDefault())
                    .parse(dateString).getTime();
        } catch (Exception e) {
            return System.currentTimeMillis();
        }
    }
    
    /**
     * 比较两个日期字符串
     * @param date1 第一个日期(yyyy-MM-dd)
     * @param date2 第二个日期(yyyy-MM-dd)
     * @return 1: date1 > date2, -1: date1 < date2, 0: 相等
     */
    public static int compareDates(String date1, String date2) {
        try {
            Date d1 = new SimpleDateFormat(DATE_FORMAT_FEED, Locale.getDefault())
                    .parse(date1);
            Date d2 = new SimpleDateFormat(DATE_FORMAT_FEED, Locale.getDefault())
                    .parse(date2);
            return d1.compareTo(d2);
        } catch (Exception e) {
            return 0;
        }
    }
}